Морской бой

Вариант игры «Морской бой», адаптированный под возможности ПМК.

Правила игры

  1. Игра ведётся на поле размером 10×10 клеток, строки и столбцы поля нумеруются цифрами 0…9.
  2. В начале игры каждый игрок произвольно расставляет на своём игровом поле 10 одноклеточных кораблей; допускается размещение кораблей в соседних клетках.
  3. Игроки ходят попеременно, объявляя сопернику координаты залпа по его полю, а соперник сообщает удалось ли попасть по его кораблю или нет. Поразивший цель игрок получает право на внеочередной ход. Повторный залп по уже подбитому кораблю считается промахом.
  4. Побеждает игрок, первым потопивший все корабли противника.

Распределение регистров

Служебные (используются для нужд самой программы):

Неиспользуемые:

Игровой процесс

Начало

Для начала партии необходимо ввести в #X любое целое положительное число (оно послужит основой для генерации псевдослучайных чисел) и скомандовать В/0 С/П. Пока ПМК расставляет в памяти свои корабли, мы расставляем на бумаге свои. Появление на индикаторе −10 свидетельствует о готовности калькулятора играть. Право первого хода предоставляется человеку (но при желании его можно уступить ПМК, нажав БП 4 6 (для МК-61\МК-52), либо БП 4 0 (для Б3-34\МК-54\МК-56) и С/П).

Ход человека

Указываем координаты клетки залпа — целое число от 00 до 99 (если первая координата — 0, её можно опустить) и нажимаем С/П. ПМК сравнивает введённое значение с координатами своих кораблей, в случае попадания, высвечивает отрицательное число — количество своих непотопленных кораблей, и ждёт нашего следующего хода человека. Если же совпадений не было, на индикаторе появляется 0, и надо нажать С/П для передачи хода калькулятору. В любом случае координаты последнего залпа человека находятся в #Y.

Следует заметить, что повторный залп по уже подбитому кораблю считается промахом.

Ход калькулятора

ПМК высвечивает координаты своего залпа (если число однозначное (0…9), мысленно дописываем к нему слева 0). Сверяем значение с нашим игровым полем, если ПМК попал, сообщаем ему об этом: вводим любое отрицательное число (обычно достаточно нажать /−/; но если в #X находится 0 к /−/ надо добавить ВП) и С/П; ПМК продолжит вести огонь пока не промахнётся. В случае его промаха просто переходим к своему ходу (указываем координаты своего очередного залпа и С/П).

В любой момент игры можно проверить, сколько кораблей остаётся на плаву у нас (П→X b) и у калькулятора (П→Xc).

Конец игры

Игра заканчивается, когда все корабли одного из игроков оказываются потопленными. ПМК отмечает это сообщением ЕГГОГ — либо после нашего хода (значит мы выиграли, уничтожив последний из кораблей калькулятора), либо после нашего 10-го по счёту сообщения калькулятору о его попадании по вашему кораблю (в таком случае победа остаётся за калькулятором). В любом случае координаты финального залпа морской баталии находятся в #Y. Можно начинать следующую партию!

Пример игры

2 5 В/О С/П −10 — начало игры, число 25 выбрано для инициализации датчика псевдослучайных чисел.

6 2 С/П −9 — мы дали залп по полю 62 и поразили цель; у ПМК осталось 9 кораблей.

4 5 С/П 0 — мы дали залп по полю 45 и промахнулись, передаём ход ПМК: С/П.

90 — ПМК дал залп по полю 90, допустим, что он попал по нашему кораблю: /−/ −90 С/П.

67 — ПМК дал залп по полю 67, пускай он промахнулся. Вводим координаты своего следующего залпа и нажимаем С/П и т. д.

Примечания

Источник: журнал «Техника — молодёжи», № 10 / 1986.

Авторы: Г. Горовой.

Переписал, взяв за основу алгоритм оригинала, оптимизировал, перевёл в формат эмулятора и составил эту инструкцию: А. Лаврик